src/object.js
function merge( to ){
	var from,
		i, c,
		m = function( val, key ){
			to[ key ] = merge( to[key], val );
		};

	for( i = 1, c = arguments.length; i < c; i++ ){
		from = arguments[i];

		if ( to === from ){
			continue;
		}else if ( to && to.merge ){
			to.merge( from );
		}else if ( !bmoor.isObject(from) ){
			to = from;
		}else if ( !bmoor.isObject(to) ){
			to = merge( {}, from );
		}else{
			bmoor.safe( from, m );
		}
	}
	
	return to;
}
function merge( to ){
	var from,
		i, c,
		m = function( val, key ){
			to[ key ] = merge( to[key], val );
		};

	for( i = 1, c = arguments.length; i < c; i++ ){
		from = arguments[i];

		if ( to === from ){
			continue;
		}else if ( to && to.merge ){
			to.merge( from );
		}else if ( !bmoor.isObject(from) ){
			to = from;
		}else if ( !bmoor.isObject(to) ){
			to = merge( {}, from );
		}else{
			bmoor.safe( from, m );
		}
	}
	
	return to;
}
function merge ( to ) { var from , i , c , m = function ( val , key ) { to [ key ] = merge ( to [ key ] , val ) ; } ; for ( i = 1 , c = arguments . length ; i < c ; i ++ ) { from = arguments [ i ] ; if ( to === from ) { continue ; } else if ( to && to . merge ) { to . merge ( from ) ; } else if ( ! bmoor . isObject ( from ) ) { to = from ; } else if ( ! bmoor . isObject ( to ) ) { to = merge ( { } , from ) ; } else { bmoor . safe ( from , m ) ; } } return to ; }
Deep copy version of extend
Deep copy version of extend