I noticed that, say, goolge's 404 page returns a 404 status (http://www.google.com/404.html) while github's returns 200 (https://github.com/404.html). Should error pages (even 503s, etc.) always be served with the correct status codes? Or should front end servers intercept them and display 200ed error pages?
Error pages should always be served with the correct status codes.
GitHub's 404.html page is returning 200 because you're directly accessing their 404 template.
https://github.com/lollerskates returns a 404 status code, as it should be.