Yes the code looks good for that! What I meant is that pre-allocating the .grad as done in this particular sample is not very useful. But only that part, the rest of the code is 
For your questions:

Yes
Yes
Yes



The last point is the most important here.
Changing this would mean changing one key invariant of the autograd: backward functions never change their inputs inplace.