docs: function modifyTarget(target, source, sourceKeys, filters, overrideKeys) {
  
      // Arguments available to each filter.
      var filterContext = {
          target: target, // readonly
          source: source, // readonly
          sourceKey: null, // readonly
          targetKey: null,
          sourceValue: null
      };
  
      // For each property, send it through the filter pipeline and
      // then apply it to the target object.
      for (var sourceKey in sourceKeys) {
          filterContext.sourceKey = sourceKey;
          filterContext.targetKey = sourceKeys[sourceKey];
  
          // Throw an error if the source property name doesn't refer to a value.
          if (!(sourceKey in source)) {
              errorManager.propertyNotFound(sourceKey, source);
          }
          filterContext.sourceValue = source[sourceKey];
  
          // Apply the filters to the property.
          for (var i = 0; i < filters.length; i++) {
              if (!filters[i](filterContext)) {
                  // Don't apply this property to the target.
                  filterContext.targetKey = null;
                  break;
              }
          }
  
          // Apply property to target.
          if (filterContext.targetKey !== null) {
              // Allow overwrite to take place. Developer can ignore error.
              var overwritten = filterContext.targetKey in target;
  
              target[filterContext.targetKey] = filterContext.sourceValue;
  
              if (overwritten && !overrideKeys[sourceKey]) {
                  errorManager.propertyOverride(filterContext.targetKey, target);
              }
          }
      }
  }