code: function( target ) {
  			var argsLength = arguments.length,
  				overwrite, propertiesList;
  
  			if ( typeof( overwrite = arguments[ argsLength - 1 ] ) == 'boolean' )
  				argsLength--;
  			else if ( typeof( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' ) {
  				propertiesList = arguments[ argsLength - 1 ];
  				argsLength -= 2;
  			}
  			for ( var i = 1; i < argsLength; i++ ) {
  				var source = arguments[ i ];
  				for ( var propertyName in source ) {
  					// Only copy existed fields if in overwrite mode.
  					if ( overwrite === true || target[ propertyName ] == null || propertyName == 'createIterator' ) {
  						// Only copy  specified fields if list is provided.
  						if ( !propertiesList || ( propertyName in propertiesList ) )
  							target[ propertyName ] = source[ propertyName ];
  
  					}
  				}
  			}
  
  			return target;
  		}
docs: Copies the properties from one object to another. By default, properties
  already present in the target object **are not** overwritten.
  
  // Create the sample object.
  var myObject = {
  prop1: true
  };
  
  // Extend the above object with two properties.
  CKEDITOR.tools.extend( myObject, {
  prop2: true,
  prop3: true
  } );
  
  // Alert 'prop1', 'prop2' and 'prop3'.
  for ( var p in myObject )
  alert( p );
  
  @param {Object} target The object to be extended.
  @param {Object...} source The object(s) from properties will be
  copied. Any number of objects can be passed to this function.
  @param {Boolean} [overwrite] If `true` is specified, it indicates that
  properties already present in the target object could be
  overwritten by subsequent objects.
  @param {Object} [properties] Only properties within the specified names
  list will be received from the source object.
  @returns {Object} The extended object (target).