function main( context ) {
	var source = context.getSourceCode();

	/**
	* Reports the error message.
	*
	* @private
	* @param {ASTNode} node - offending node
	* @param {string} msg - error message
	*/
	function report( node, msg ) {
		context.report({
			'node': node,
			'message': msg,
			'fix': fix
		});

		/**
		* Fixes the lint error.
		*
		* @private
		* @param {Function} fixer - ESLint fixer
		* @returns {Object} fix
		*/
		function fix( fixer ) {
			var str = source.getText( node );
			str = str.replace( RE_MULTIPLE_BLANK_LINES, '$1' );
			return fixer.replaceText( node, str );
		}
	}

	/**
	* Checks whether JSDoc comments do not have multiple subsequent blank lines.
	*
	* @private
	* @param {ASTNode} node - node to examine
	*/
	function validate( node ) {
		var jsdoc;
		var msg;

		jsdoc = findJSDoc( source, node );
		if ( isObject( jsdoc ) ) {
			if ( RE_MULTIPLE_BLANK_LINES.test( jsdoc.value ) ) {
				msg = 'JSDoc comments should not have multiple subsequent blank lines';
				report( jsdoc, msg );
			}
		}
	}
	return {
		'FunctionExpression:exit': validate,
		'FunctionDeclaration:exit': validate,
		'VariableDeclaration:exit': validate,
		'ExpressionStatement:exit': validate
	};
}
Rule for validating that JSDoc comments do not have multiple subsequent blank lines.

@param {Object} context - ESLint context
@returns {Object} validators