Why is it important for your server to respond with a 404 header code when the page is "not found"? It is important because SE rely on those header codes to direct the crawling and reindexing of pages. If your site doesn't respond properly it may affect the crawling and indexing of your site. Specially important for news sites and sites that rotate their content at a fast pace.
How to verify if your server is responding with the right codes?
If a page exists in your server, it should return a 200 code "found". If it doesn't, it should only return a 404. We see clients whose servers respond with 200, 301, 302 and others when they should be responding with 404.
Use a web debugging tool or proxy like Charles or Tamper Data firefox extension. And type in a non-existant url in your site.
What if your site is returning something different than 404?
If it is returning something else, you have to check the specific case to learn why the server is reponding differently. To fix it it can be as easy as including a line in the main .htaccess file of your Apache-based host. It can be as complicated as having to change the way your CMS treats URL requests (specially if using clean urls.)
What about pages that first do a 301 to the canonical version of your site and then a 404?
In our experience it is ok, since the canonical redirection needs to be external then is very difficult to first check for the existance of the page and then do the canonical redirection - best treatment should be that if the page doesn't exist it should return a 404.
Link to Video