docs: function(value1, value2, mapKeys) {
  	
  	_.each([value1, value2], function(value, index) {
  		if (!_.isObject(value)) {
  			throw new Error(_.sprintf('[ helpers.js/_extendHash] expects object for "value%d" (%s).', index, JSON.parse(value)));
  		}
  	});
  
  	// sum the properties of the two value hashes;
  	// Note: this aggregation only works for integer for now.
  	return _.reduce(value2 || {}, function(result, value, property) {
  		
  		if (mapKeys) {
  			property = mapKeys[property] || property;
  		}
  //		property = property[mapKeys] ? property[mapKeys]() : property;
  		
  		if (!result[property]) {
  			result[property] = 0;
  			//_.isNumber(value) ? 0 : _.isArray(value) ? [] : (_.isString(value) && value) || {};
  		}
  		if (_.isNumber(value)) {
  
  			// sum values
  			result[property] += value;
  		} else if (_.isArray(value)) {
  
  			// use _formatRow() to traverse children of this property.
  			result[property] = _formatRow(result, value, property);
  		} else if (_.isObject(value)) {
  
  			if (_.isNumber(result[property])) {
  				result[property] += _formatRow(null, value, property)[property];
  			} else if (_.isObject(result[property])) {
  				
  				// if value is a hash or key/values, then recurse
  				result[property] = _extendHash(result[property], value, mapKeys);
  			}
  		}
  		return result;
  	}, _.extend({}, value1));
  }