function deepPluck( arr, path, options ) {
	var dget;
	var opts;
	var out;
	var err;
	var i;

	if ( !isArray( arr ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array. Value: `%s`.', arr ) );
	}
	opts = defaults();
	if ( arguments.length > 2 ) {
		err = validate( opts, options );
		if ( err ) {
			throw err;
		}
	}
	if ( opts.copy ) {
		out = new Array( arr.length );
	} else {
		out = arr;
	}
	dget = deepGet( path, {
		'sep': opts.sep
	});
	for ( i = 0; i < arr.length; i++ ) {
		out[ i ] = dget( arr[ i ] );
	}
	return out;
}
Extracts a nested property value from each element of an object array.

@param {Array} arr - source array
@param {(string|Array)} path - key path
@param {Options} [options] - function options
@param {boolean} [options.copy=true] - boolean indicating whether to return a new data structure
@param {string} [options.sep="."] - key path separator
@throws {TypeError} first argument must be an array
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@returns {Array} destination array

@example
var arr = [
    {'a':{'b':{'c':1}}},
    {'a':{'b':{'c':2}}}
];

var out = deepPluck( arr, 'a.b.c' );
// returns [ 1, 2 ]

@example
var arr = [
    {'a':[0,1,2]},
    {'a':[3,4,5]}
];

var out = deepPluck( arr, ['a',1] );
// returns [ 1, 4 ]

@example
var arr = [
    {'a':{'b':{'c':1}}},
    {'a':{'b':{'c':2}}}
];

var out = deepPluck( arr, 'a.b.c', {'copy':false} );
// returns [ 1, 2 ]

var bool = ( arr[ 0 ] === out[ 0 ] );
// returns true

@example
var arr = [
    {'a':{'b':{'c':1}}},
    {'a':{'b':{'c':2}}}
];

var out = deepPluck( arr, 'a|b|c', {'sep':'|'} );
// returns [ 1, 2 ]