src/js/util/helper.js
function merge_or_apply(defaults, source) {
	var defaultKeys = keys(defaults);
	var sourceKeys = keys(source);
	return reduce(defaultKeys, function(result, key) {
		if (sourceKeys.indexOf(key) > -1) {
			result[key] = source[key];
			return result;
		} else {
			result[key] = defaults[key];
			return result;
		}
	}, {});
}
function merge_or_apply(defaults, source) {
	var defaultKeys = keys(defaults);
	var sourceKeys = keys(source);
	return reduce(defaultKeys, function(result, key) {
		if (sourceKeys.indexOf(key) > -1) {
			result[key] = source[key];
			return result;
		} else {
			result[key] = defaults[key];
			return result;
		}
	}, {});
}
Given a defaults object and a source object, copy the value from the source
if it contains the same key, otherwise return the default. Skip keys that
only exist in the source object.
@param {object} defaults - Default schema
@param {object} source - Source object to copy properties from
@returns {object} - Result has identical keys to defaults
@static
@memberof helper