Placing whitespace between "404" and the mapping in UrlMappings.groovy causes grails to silently ignore the mappings. When deployed with tomcat, the default tomcat 404 page will appear.
Also related, it will fail if 404 is quoted with single quotes, too.
The reason it's failing in that an error-page tag is never inserted into the generated web.xml. It looks like grails is using a regexp to match mappings in org.codehaus.groovy.grails.plugins.web.mapping.UrlMappingsGrailsPlugin that doesn't handle these cases.