I repeated this elsewhere, but I think canonical on 404 page does make sense, especially if you consider the following two statements true:
- There is a reason for 404s, don't 301 everything
- There is no reason to lose the value of someone linking to your page.
If those 2 statements are true then you should create an individual error page, and then everytime you serve a 404 you should include canonical to that error page. That page should have useful content (explanation of page missing and where you could go), probably a search box, and links to the most valuable content on your site. This satisfies both points.