Extracts arguments and defined target for the require function
function getInputArguments(args) {
      var out = {};
      out.localServices = {};
      if (args.length > 0) {
         out.source = args[0];
         out.target = args[0];
         if (_.isPlainObject(args[0])) {
            var opts = args[0];
            out.target = opts.target;
            out.source = opts.source;
            out.instance = opts.instance;
         }
         // call(func, callback)
         if (args.length > 1) {
            var argsDefined = _.isString(args[0]) || _.isArray(args[0]);
            if (argsDefined) {
               if (_.isArray(args[0])) {
                  out.source = args[0];
               } else {
                  out.source = _.isString(args[0]) ? [args[0]] : args[0];
               }
               if (_.isFunction(args[1])) {
                  out.target = args[1];
               }
               if (_.isFunction(args[2])) {
                  out.target = args[2];
               }
            } else {

               if (_.isFunction(args[1])) {
                  out.callReady = args[1];
               }
               if (_.isPlainObject(args[1])) {
                  out.localServices = args[1];
               }
            }
         }
         if (args.length === 3) {
            if (_.isPlainObject(args[1])) {
               out.localServices = args[1];
            }
            if (_.isFunction(args[2])) {
               out.callReady = args[2];
            }
         }
      }
      out.target = out.target || function() {};
      out.source = out.source ? out.source : out.target;
      out.callReady = out.callReady || function() {};
      return out;
   }