Using the Charge plugin for membership subscriptions
Developer of Charge here. 

Setup for installs up to (and including) 2.0.x  :

The simplest setup would be to use the onBeforeCharge event. 

This fires at the very start of the charge request, after validation but before anything has actually happened.

You'd use that to jump in, and create your user, entry, or anything else you might want to do. As part of that same event you can modify the actual ChargeModel which will be used in the payment request too.

The onBeforeCharge event fires before we pull out the user for the request, so as long as you're creating the user at that point, you won't need to do anything else to have all the subsequent steps properly associated to that user either. 

Of course be aware that a payment can fail for any number of reasons, so check in that onBeforeCharge event if you actually do need to create the user before blindly going ahead. 

Additionally, you can use the onCharge event to later perform any clean up you might need once the payment has actually succeeded. 

Setup for installs from 2.1+

2.1 (not yet released as of 25/04/16) is bringing inline user registration to the payment forms, so in that case you'd just pass a new flag on the request to registerUser = true, and let Charge do the rest. 

Charge will only attempt to register a new user if required, and will use the customerEmail as the default base, but that can be overridden with other parameters and inputs on the form.