By make them unbreakable you can use a different blockState and when the blockState was switch it will update, I assume you can use three different blockStates. One for the original, one for the transparent, and one for the new unbreakable version. Heck you could use different blocks to accomplish this if you wanted.
public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos)
{
return this.blockHardness;
}
Edit that method it is Deprecated but it still works, just set the returned value to -1 to make the block unbreakable.
I don't know what program to use as I have not actually fiddled around with the new JSON system yet.