code: function merge (target, source) {
    if (isMergeable(source)) {
      var keys = Object.keys(source);
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        var sourceSetting = source[key];
        var targetSetting = target[key];
  
        if (isMergeable(sourceSetting)) {
          // It's a nested object, so merge it recursively
          target[key] = merge(targetSetting || {}, sourceSetting);
        }
        else if (sourceSetting !== undefined) {
          // It's a scalar value, function, or array. No merging necessary. Just overwrite the target value.
          target[key] = sourceSetting;
        }
      }
    }
    return target;
  }
docs: Merges the properties of the source object into the target object.
  
  @param {object} target - The object that we're populating
  @param {?object} source - The options that are being merged
  @returns {object}