function assignWith(object, source, customizer) {
	      var index = -1,
	          props = keys(source),
	          length = props.length;

	      while (++index < length) {
	        var key = props[index],
	            value = object[key],
	            result = customizer(value, source[key], key, object, source);

	        if ((result === result ? (result !== value) : (value === value)) ||
	            (value === undefined && !(key in object))) {
	          object[key] = result;
	        }
	      }
	      return object;
	    }
A specialized version of `_.assign` for customizing assigned values without
support for argument juggling, multiple sources, and `this` binding `customizer`
functions.

@private
@param {Object} object The destination object.
@param {Object} source The source object.
@param {Function} customizer The function to customize assigned values.
@returns {Object} Returns `object`.