Another bump.
Tractorcow's approach is so close to being perfect. The mentioned downside of the ID being 0 in the child getCMSFields() method, unfortunately, is the killer point. My child object will also have children and I only show the child GridField if the child has actually been saved (so checking $this->ID, as per Andrew Houle's approach). Would upvote if the facility existed though.
It is a shame that the GridField doesn't pass in the parent object ID to the child object if it is being created as a matter of course.
One of the main reasons I would like to know the parent ID is due to the behaviour of SilverStripe when displaying the parent information (which the GridField does actually add to the form anyway, in a readonly fashion). If there are over 100 objects of the parent object type, rather than displaying the parent title, it just displays the ID - which isn't really helpful (in a parent has_many, child has_one relationship anyway). If the child object has already been created, that can be handled - and I do, but not during creation when only the parent ID is presented in the form.