Eu diria que você tem que falar com o líder da equipe e dizer algo como:
I know you guys are a .NET shop, but I was actually hired for my Java/JRubyRails skills. I can build this new application in X amount of time using those tools that I already know. I could learn C#/mvc4 like you want, but it will take >> X amount of time. What do you want?
Isso levanta a questão de "habilidades que você foi (presumidamente)" contratou "para" versus "habilidades que você precisa agora" e também mostra que você está disposto a aprender as novas habilidades, mas que ele irá demorar mais para desenvolver o novo aplicativo, já que você é novo nesse conjunto de ferramentas. E você faz quer mostrar que está disposto a aprender novas habilidades. Não estar aberto para aprender novas habilidades é uma boa maneira de garantir que seu emprego termine quando suas habilidades não forem mais necessárias.
Quanto à sua pergunta no final:
At what point should a developer be allowed to choose his tools? Is this dependent on the company? Does my company suck or is this considered normal? Do greener pastures exist? Am I looking at this the wrong way?
Geralmente depende da empresa. Se uma empresa compra ferramentas da Microsoft e padroniza tudo na plataforma VisualStudio e no .NET, pode ficar muito complicado se um desenvolvedor insistir em usar o Linux e o C. Isso é normal. Exceções podem existir onde a empresa é menos exigente com relação aos editores, como permitir que os desenvolvedores escolham o Vi vs. Emacs, desde que a saída seja a mesma. Eu sei que algumas empresas até deixam os desenvolvedores escolherem o Windows versus o Linux, mas a linguagem em que trabalham tem muito bons suporte e tempo de execução para ambos os sistemas operacionais.
Por que as empresas fazem isso? Consistência é um dos motivos. Pode ser muito difícil depurar as coisas quando o aplicativo é uma colcha de retalhos de binários criados nas linguagens / estruturas favoritas de vários desenvolvedores, construídos em diferentes ferramentas e testados em sistemas muito diferentes. Se todos os desenvolvedores trabalharem em principalmente configurações semelhantes, esses tipos de problemas serão resolvidos.
No seu caso, parece que você foi contratado para trabalhar em tecnologia que não é padrão nesta empresa. Isso parece estranho para mim, e você pode querer conversar com a pessoa que o contratou sobre por que eles queriam isso.