Pretty-much, yeah. You could avoid putting your Book in it's own scope, by instead returning:
$this->customise($book)->renderWith(...
However, this will mean that any matching variable names will be overridden. For example, if your book has a 'Title' field, using this method would override the 'Title' for the page. Sometimes this is desirable (news items, for example), sometimes not.