If the custom data is the SAME for every lead, you could use My Tokens at the program level, which allows you to define a token with a specific value for that program.
If you're talking different values for each lead, then you don't really have any choice but to go the route Josh is suggesting and build custom fields in Marketo that you upload data into. Be aware though, you cannot delete Marketo custom fields later, you can only hide them, so building a lot of custom fields can start to clutter your database if you're constantly building them for one-off campaigns.
There's an old trick I've seen used successfully where you can just create a bunch of generic custom fields for this campaign (like custom field 1, custome field 2, etc), then once the campaign is over delete the data from them and re-use the fields for other campaigns later.