Ola, Lucas!
Eu tinha conseguido chegar nesse resultado ontem a noite, sim! Mas não tive tempo de atualizar o post aqui. Obrigado pela resposta 
Outra coisa que eu fiz foi sobrescrever o método pathFor(); e redirecionar todas requisições para default.vm, onde terei o seguinte:
Se eu vou chamar, por exemplo, OrcamentoController.novo(), ele vai executar a lógica e redirecionar as requisições para default.vm, onde irei alterar o conteúdo dinâmicamente e o menu (pois o menu é diferente, dependendo do tipo de usuário). A minha dúvida é: onde irei instanciar o Template e o Context do Velocity? Na OrcamentoController.novo()? Pois ele irá renderizar a default.vm, mas antes precisa dar o merge com os dados, certo?
Na minha cabeça, faria o seguinte:
getTemplate(“default.vm”);
dentro do default.vm:
#parse(“header.vm”);
#parse(variavel.vm);
#parse(“footer.vm”);
Aí, o resultado disso seria exibido… mas como exibir esse resultado se automaticamente ele irá renderizar a default.vm? Eu posso até colocar isso dentro do método OrcamentoController.novo(), porém como inserir esse resultado todo na view? Será que deu pra entender?
abs!
André Vendramini