code: function marshalArgs(data, args, path, props) {
    let values = [];
    for (let i=0, l=args.length; i<l; i++) {
      let arg = args[i];
      let name = arg.name;
      let v;
      if (arg.literal) {
        v = arg.value;
      } else {
        if (arg.structured) {
          v = get$0(data, name);
          // when data is not stored e.g. `splices`
          if (v === undefined) {
            v = props[name];
          }
        } else {
          v = data[name];
        }
      }
      if (arg.wildcard) {
        // Only send the actual path changed info if the change that
        // caused the observer to run matched the wildcard
        let baseChanged = (name.indexOf(path + '.') === 0);
        let matches = (path.indexOf(name) === 0 && !baseChanged);
        values[i] = {
          path: matches ? path : name,
          value: matches ? props[path] : v,
          base: v
        };
      } else {
        values[i] = v;
      }
    }
    return values;
  }
docs: Gather the argument values for a method specified in the provided array
  of argument metadata.
  
  The `path` and `value` arguments are used to fill in wildcard descriptor
  when the method is being called as a result of a path notification.
  
  @param {Object} data Instance data storage object to read properties from
  @param {!Array<!MethodArg>} args Array of argument metadata
  @param {string} path Property/path name that triggered the method effect
  @param {Object} props Bag of current property changes
  @return {Array<*>} Array of argument values
  @private