function validateLinks( links, options, clbk ) {
	var fopts;
	var opts;
	var err;
	var cb;
	if ( !isObjectArray( links ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array of objects. Value: `%s`.', links ) );
	}
	opts = {
		'database': config.database
	};
	if ( arguments.length === 2 ) {
		cb = options;
	} else {
		err = validate( opts, options );
		if ( err ) {
			throw err;
		}
		cb = clbk;
	}
	if ( !isFunction( cb ) ) {
		throw new TypeError( format( 'invalid argument. Last argument must be a function. Value: `%s`.', cb ) );
	}
	opts.database = resolve( cwd(), opts.database );
	fopts = {
		'encoding': 'utf8'
	};
	readJSON( opts.database, fopts, onRead );

	/**
	* Callback invoked upon reading a file.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {Object} db - database
	* @returns {void}
	*/
	function onRead( error, db ) {
		var out;
		if ( error ) {
			return cb( error );
		}
		out = check( links, db );
		cb( null, out );
	}
}
Validates an array of link objects against a link database.

@param {ObjectArray} links - array of link objects to validate
@param {Options} [options] - options
@param {string} [options.database] - path to a link database file (JSON)
@param {Callback} clbk - callback to invoke upon resolving an id
@throws {TypeError} first argument must be an object array
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@throws {TypeError} last argument must be a function

@example
validateLinks([
    {
        'id': 'gumbel-distibution',
        'url': 'https://en.wikipedia.org/wiki/Gumbel_distribution'
    }
], clbk );

function clbk( error, validationErrors ) {
    if ( error ) {
        throw error;
    }
    console.log( validationErrors );
    // => [...]
}