function create( options, clbk ) {
	var opts;
	var err;
	var cb;

	opts = copy( DEFAULTS );
	if ( arguments.length > 1 ) {
		cb = clbk;
		err = validate( opts, options );
		if ( err ) {
			throw err;
		}
	} else {
		cb = options;
	}
	if ( !isFunction( cb ) ) {
		throw new TypeError( format( 'invalid argument. Last argument must be a function. Value: `%s`.', cb ) );
	}
	if ( opts.dir ) {
		opts.dir = resolve( cwd(), opts.dir );
	} else {
		opts.dir = cwd();
	}
	debug( 'Options: %s', JSON.stringify( opts ) );

	debug( 'Searching for README files...' );
	findREADMEs( opts, onFind );

	/**
	* Callback invoked after finding package README files.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {(EmptyArray|StringArray)} files - list of matching files
	* @returns {void}
	*/
	function onFind( error, files ) {
		var fopts;
		if ( error ) {
			return done( error );
		}
		debug( 'Found %d README files.', files.length );
		if ( files.length ) {
			debug( 'Reading files...' );
			fopts = {
				'encoding': 'utf8'
			};
			return readFileList( files, fopts, onRead );
		}
		return done( null, [] );
	}

	/**
	* Callback invoked upon reading a list of files.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {(EmptyArray|ObjectArray)} files - file contents
	* @returns {void}
	*/
	function onRead( error, files ) {
		if ( error ) {
			return done( error );
		}
		debug( 'Finished reading files.' );

		debug( 'Rendering file contents...' );
		render( files, opts.base, done );
	}

	/**
	* Callback invoked upon reading files.
	*
	* @private
	* @param {(Error|null)} error - error object
	* @param {(EmptyArray|ObjectArray)} files - file contents
	* @returns {void}
	*/
	function done( error, files ) {
		var out;
		var i;
		if ( error ) {
			debug( 'Encountered an error: %s', error.message );
			return cb( error );
		}
		debug( 'Building database...' );
		out = {};
		for ( i = 0; i < files.length; i++ ) {
			out[ files[ i ].file ] = files[ i ].data;
		}
		debug( 'Finished building database.' );
		cb( null, out );
	}
}
Asynchronously generates an HTML rendered package README database.

@param {Options} [options] - function options
@param {string} [options.dir] - root directory from which to search for package READMEs
@param {string} [options.pattern='**\/package.json'] - glob pattern
@param {StringArray} [options.ignore] - glob pattern(s) to exclude matches
@param {string} [options.base="/docs/api/develop/"] - base path for internal URLs
@param {Function} clbk - callback
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@throws {Error} `pattern` option must end with `package.json`
@throws {TypeError} last argument must be a callback function

@example
create( onDatabase );

function onDatabase( error, db ) {
    if ( error ) {
        console.error( error.message );
        return;
    }
    console.log( JSON.stringify( db ) );
}