function main( context ) {
	var whitelist;
	var opts;

	opts = context.options[ 0 ];
	whitelist = opts.whitelist || [];

	/**
	* Checks whether style rules for tag descriptions are obeyed.
	*
	* @private
	* @param {Object} section - parameters or returns section
	*/
	function tagDescriptionStyle( section ) {
		var desc;
		var tags;
		var i;

		tags = section.tags;
		if ( tags ) {
			for ( i = 0; i < tags.length; i++ ) {
				desc = tags[ i ].description;
				if ( !endsWith( desc, '.' ) ) {
					context.report( 'Tag description must end with a period', section );
				}
				if ( !hasValidStart( desc ) ) {
					context.report( 'Tag description must be capitalized', section );
				}
			}
		}
	}
	return {
		'parameters': tagDescriptionStyle,
		'returns': tagDescriptionStyle
	};

	/**
	* Checks whether a tag description starts with a capitalized letter or number (save for exceptions such as proper nouns).
	*
	* @private
	* @param {string} desc - tag description
	* @returns {boolean} boolean indicating whether tag description is valid
	*/
	function hasValidStart( desc ) {
		var found;
		var word;
		var i;

		if ( !isCapitalized( desc ) && !desc.match( RE_NUM_SPECIAL ) ) {
			// Check whether description starts with a word from the whitelist:
			found = false;
			for ( i = 0; i < whitelist.length; i++ ) {
				word = whitelist[ i ];
				if ( startsWith( desc, word+' ' ) ) {
					found = true;
					break;
				}
			}
			// If not, raise an error:
			if ( !found ) {
				return false;
			}
		}
		return true;
	}
}
Rule for enforcing styling of tag descriptions.

@param {Context} context - lint context
@returns {Object} validators