Turned out that the issue was with the way I had deployed the contract using Truffle. Basically Proxy contract's constructor took the address of ERCToken as an input. So Truffle's deployed method resolved correctly only for the main contract (ERCToken) and never for Proxy.

I had to refactor the constructor code by adding separate function to set the ERCToken address and then deployed the two contracts separately. This resulted in both ERCToken.deployed() and Proxy.deployed() resolving correctly.