lib/packages/core.js
function(dest, source, map) {

		var name;

		for (name in source) {

			if (!(name in dest)) {

				dest[name] = source[name];

			} else if (name in map) {

				if (map[name] == true) {

					Firestorm.implement(dest[name], source[name]);

				} else {

					this._mergeWithMap(dest[name], source[name], map[name]);

				}

			}

		}

	}
function(dest, source, map) {

		var name;

		for (name in source) {

			if (!(name in dest)) {

				dest[name] = source[name];

			} else if (name in map) {

				if (map[name] == true) {

					Firestorm.implement(dest[name], source[name]);

				} else {

					this._mergeWithMap(dest[name], source[name], map[name]);

				}

			}

		}

	}
function ( dest , source , map ) { var name ; for ( name in source ) { if ( ! ( name in dest ) ) { dest [ name ] = source [ name ] ; } else if ( name in map ) { if ( map [ name ] == true ) { Firestorm . implement ( dest [ name ] , source [ name ] ) ; } else { this . _mergeWithMap ( dest [ name ] , source [ name ] , map [ name ] ) ; } } } }
Advanced merging algorithm
@param {Object} dest
@param {Object} source
@param {Object} map
Advanced merging algorithm