docs: function createSelectorsManager() {
      var selectors = {};
  
      return {
          addSelector: addSelector,
          executeSelector: executeSelector
      };
  
      /*
       * Add a selector that matches source keys that start with the
       * specified prefix.
       *
       * @param {string} prefix
       * @param {function} [selector] The selector for the specified prefix.
       * @return {function} The selector for the specified prefix.
       */
      function addSelector(prefix, selector) {
          if (selector !== undefined) {
              selectors[prefix] = selector;
          }
          return selectors[prefix];
      }
  
      /*
       * Checks whether the source key matches one of the existing selectors.
       * If it does, the selector's handler is invoked on the source key.
       *
       * @param {object} source The source object.
       * @param {string} sourceKey The source object key.
       * @param {string} targetKey The target object key.
       * @param {object} sourceKeys The keys of the source properties to merge.
       * @param {object} overrideKeys
       *    The keys of the source properties to not report an error if the
       *    property already exists in the target object.
       */
      function executeSelector(source, sourceKey, targetKey,
          sourceKeys, overrideKeys) {
  
          for (var prefix in selectors) {
              // sourceKey starts with selector's prefix
              if (sourceKey.indexOf(prefix) === 0) {
  
                  // Remove prefix from source key.
                  sourceKey = sourceKey.substring(prefix.length);
  
                  // Execute the selector's handler.
                  selectors[prefix]({
                      source: source,
                      sourceKey: sourceKey,
                      targetKey: targetKey ? targetKey : sourceKey,
                      sourceKeys: sourceKeys,
                      overrideKeys: overrideKeys
                  });
  
                  return true;
              }
          }
          return false;
      }
  }