404 redirect:
You could set up your single to use 404-not-found
(example) as a uri, and add a redirect:
{% redirect '/404-not-found' %}
to the /404.html
file. That way every 404-page gets redirected to the single.
Downside: You will loose the 404-header, and the uri in the address-bar will be lost.
.
Load Single:
Set up a single, and load the single entry into the /404.html
file:
{% set entry = craft.section('404-single-handle').first() %}
Now you can use the entry-var just like you would in a normal single template.
You will have to use a single-uri, but you could add a conditional to the single template (not the 404.html), which redirects to index if it gets accessed directly:
{% redirect '/' %}
.
EDIT: I didn't know a single can be set to 404 without breaking the functionality, so Brandon's answer is the way to go ;)