code: 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;
     }
docs: Extracts arguments and defined target for the require function