Não está claro em sua pergunta se os arquivos PHP corretos estão sendo atingidos. Supondo que a sintaxe do seu .htaccess esteja correta:
Seu RewriteRule está indicando seu index.php como o receptor de todos os arquivos e diretórios que não existem, com o caminho (acredito) sendo enviado para $_GET['a'] ... cabe ao seu index.php para detectar e lidar com isso apropriadamente.
ErrorDocument é um mecanismo separado e, mais uma vez, se o 404.php está sendo atingido, cabe a ele, por exemplo, header('HTTP/1.1 404 File Not Found') e, em seguida, HTML de saída que indica uma página não encontrada.