diff --git a/lib/polymorphic.js b/lib/polymorphic.js
index <HASH>..<HASH> 100644
--- a/lib/polymorphic.js
+++ b/lib/polymorphic.js
@@ -367,12 +367,12 @@ function polymorphic() {
 	 *  @return  array   options
 	 */
 	function parse(signature) {
-		var pattern = /([a-zA-Z]+!?|\.{3})(?:[:\s]+([a-zA-Z]+)(?:(=)(@)?(.*))?)?/;
+		var pattern = /^(?:([a-zA-Z]+!?|\.{3})(?:[:\s]+([a-zA-Z]+)(?:(=)(@)?(.*))?))?$/;
 
 		return signature.split(/\s*,\s*/).map(function(argument, index, all) {
 			var result = prepareArgument(argument.match(pattern), 'var' + (index + 1));
 
-			if (!result.type) {
+			if (result.type === false) {
 				throw new Error('polymorphic: invalid argument "' + argument + '" in signature "' + signature + '"');
 			}
 			else if (result.type === '...' && index < all.length - 1) {
@@ -380,6 +380,8 @@ function polymorphic() {
 			}
 
 			return result;
+		}).filter(function(argument) {
+			return argument.type !== undefined;
 		});
 	}
Added explicit empty signatures as viable option