How can I collect custom contribution data in an event registration form?
IMHO you cannot achieve this using a default event registration page. As you have mentioned, Drupal Webforms may be an option as well as using CiviRules or another extension/custom function that does some "magic".