Is there any way to get HAproxy serving server-side generated 503 page instead of the default blank/unavailable page?
Esta não é a pergunta que você deve fazer. O HAProxy sempre usa a resposta do servidor. O arquivo de erro é usado apenas para erros gerados internamente pelo HAProxy.
Se você verificar os registros do servidor da web, verá que essas solicitações específicas não estão sendo enviadas para o servidor da web.
Isso está acontecendo porque o HAProxy acha que seu servidor está inoperante ... porque está recebendo 503 do servidor em resposta à verificação de integridade.
Se o servidor estivesse retornando 502 ou 400 ou qualquer código de erro nas verificações de integridade, você ainda receberia o 503 do HAProxg porque o servidor está oficialmente desativado.
WARNING] 201/142518 (192371) : Server express/local-gear is DOWN, reason: Layer7 wrong status, code: 503, info: "HTTP status check returned code <3C>503<3E>", check duration: 87ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue
Você aparentemente redigiu a linha option httpchk
da configuração que você postou, mas tem que estar lá, ou o HAProxy só faria uma verificação da camada 4, e isso não estaria acontecendo.
A solução mais simples é remover essa linha do backend ou da configuração padrão.