docs: function merge() {
  	/* jshint validthis:true */
  	var nargs = arguments.length,
  		keypath,
  		options,
  		config,
  		name,
  		opts,
  		flg,
  		tmp;
  
  	if ( nargs === 1 ) {
  		config = arguments[ 0 ];
  		flg = 2; // arg #s
  	}
  	else if ( nargs === 2 ) {
  		if ( isString( arguments[ 0 ] ) ) {
  			keypath = arguments[ 0 ];
  			config = arguments[ 1 ];
  			flg = 12; // arg #s
  		} else {
  			config = arguments[ 0 ];
  			options = arguments[ 1 ];
  			flg = 23; // arg #s
  		}
  	}
  	else {
  		keypath = arguments[ 0 ];
  		config = arguments[ 1 ];
  		options = arguments[ 2 ];
  		flg = 123; // arg #s
  	}
  	name = typeName( config );
  	if (
  		!isObject( config ) &&
  		name !== this._name
  	) {
  		throw new TypeError( 'invalid input argument. Configuration must be either an object or a Config instance. Value: `' + config + '`.' );
  	}
  	opts = {};
  	if ( flg === 23 || flg === 123 ) {
  		if ( !isObject( options ) ) {
  			throw new TypeError( 'invalid input argument. Options argument must be an object. Value: `' + options + '`.' );
  		}
  		if ( options.hasOwnProperty( 'sep' ) ) {
  			opts.sep = options.sep;
  		}
  	}
  	if ( opts.sep === void 0 ) {
  		opts.sep = this._opts.sep;
  	}
  	if ( flg === 123 ) {
  		if ( !isString( keypath ) ) {
  			throw new TypeError( 'invalid input argument. Keypath argument must be a primitive string. Value: `' + keypath + '`.' );
  		}
  	}
  	// Merge...
  	if ( keypath === void 0 ) {
  		if ( name === this._name ) {
  			merge2( this._db, config._db );
  		} else {
  			merge2( this._db, config );
  		}
  		return true;
  	}
  	// Deep set and merge...
  	tmp = deepGet( this._db, keypath, opts );
  	if ( !isObject( tmp ) ) {
  		return false;
  	}
  	if ( name === this._name ) {
  		merge2( tmp, config._db );
  	} else {
  		merge2( tmp, config );
  	}
  	return deepSet( this._db, keypath, tmp, opts );
  }