O código já está escrito e os esforços são feitos
Também é desnecessário. Se você não o usa para nada, é (por definição) inútil, independentemente do que faça ou de quanto esforço foi gasto nele.
O código pode ser testado em ambiente sintético e real
Se for inútil, ainda é inútil, mesmo se você tiver testes nele. Se o código for inútil, os testes para ele também serão inúteis (portanto, manter o código comentado ali cria ambigüidade - você mantém os testes? Se você tinha o código do cliente do código comentado, você comenta o código do cliente também? )
Se bem organizado (agrupado, pacote separado, fracamente acoplado etc), não perturba você na análise geral do código ou refatoração
Não tão. Todas as suas ferramentas (controle de origem, análise estática, extrator de documentação, compilador, etc) irão rodar mais devagar, porque precisam processar mais dados (e uma parte maior ou menor desses dados é ruído).
Por outro lado, se o código não estiver bem organizado, ele bagunçará a análise estática, a refatoração e quaisquer outros.
Você está introduzindo ruído na entrada de suas ferramentas e esperando que elas lidem corretamente com ele.
E se a sua ferramenta de análise estática computar uma proporção de comentários / código? Você acabou de bagunçar, com algo que era relevante até ontem (ou sempre que o código era comentado).
O mais relevante de tudo é que os blocos de código comentados apresentam atrasos na compreensão do código para manutenção e desenvolvimento posterior e esses atrasos quase sempre custam muito. Pergunte a si mesmo: Se você precisa entender a implementação de uma função, o que você prefere ver? duas linhas de código claro ou duas linhas de código e outras vinte e seis de comentários que não são mais reais?
O código pode ser usado no futuro
Se for, você o encontrará no SCM de sua equipe.
Se você usar um SCM competente e confiar nele para manter o código morto (em vez de bagunçar a fonte), você deve ver não apenas quem excluiu esse código (autor do commit), mas por qual motivo (mensagem de commit), e quais outros mudanças foram feitas junto com ele (o resto das diferenças para aquele commit).
Quando excluído, o autor pode se sentir desconfortável
Assim?
Você é (eu presumo) uma equipe inteira de desenvolvedores que é paga para fazer o melhor software que você conhece, não "o melhor software que você conhece, sem ferir os sentimentos de X".
É uma parte da programação que a maior parte do código escrito será descartada; por exemplo, Joel Spolsky disse em algum momento que, para sua empresa, aproximadamente 2% do código escrito é produzido.
Se você priorizar o ego dos desenvolvedores sobre a qualidade da base do código, você sacrificará a qualidade do seu produto, por ... o que exatamente? Preservando a imaturidade de seus colegas desenvolvedores? Protegendo as expectativas irrealistas de seus colegas?
Edit: Eu vi um motivo válido para deixar o código comentado na fonte, e é um caso muito específico: quando o código é escrito de uma forma estranha / não intuitiva e a maneira limpa de reescrevê-lo não trabalhar por uma razão muito sutil. Isso também deve ser aplicado somente após uma tentativa repetida de corrigir o problema e sempre que a tentativa reintroduzir o mesmo defeito. Nesse caso, você deve adicionar o código intuitivo comentado como um comentário e explicar por que ele não funciona (para que futuros desenvolvedores não tentem a mesma mudança novamente):
// note by <author>: the X parameter here should normally
// be a reference:
// void teleport(dinosaur& X);
// but that would require that we raise another dinosaur and
// kill it every twelve hours
// as such, the parameter is passed by value
void teleport(dinosaur X);