A duplicação pode ser a coisa certa a fazer, mas não por este motivo.
Dizer "podemos querer que esses três lugares na base de código se comportem de maneira diferente, embora agora sejam idênticos" não é uma boa razão para a duplicação em larga escala. Esta noção poderia ser aplicada a todos os sistemas , e poderia ser usada para justificar qualquer duplicação, o que obviamente não é razoável.
A duplicação deve ser tolerada apenas quando a remoção for globalmente mais cara agora por algum outro motivo (não pode pensar em uma boa agora, mas tenha certeza de que pode haver uma - praticamente tudo na programação é um trade-off e não uma lei).
Para o que você está fazendo, a solução correta poderia ser, por exemplo, extrair o comportamento que é duplicado agora em uma Estratégia ou algum outro padrão que modela o comportamento como classes e, em seguida, usa três instâncias da mesma classe. Dessa forma, quando você faz deseja alterar o comportamento em um dos três locais, você só precisa criar uma nova Estratégia e instanciar isso em um só lugar. Dessa forma, você só precisa adicionar algumas classes e deixar o resto da base de código quase intocado.