You will have by now been asked to create some custom fields to accommodate Marketo and SFDC working together. If you want certain data captured that is not native once connected to SFDC, going to have to create a few more custom fields for the Lead and Contact objects in SFDC then, those new fields come over to Marketo as filters/triggers etc.
Lets take an example here,
Lead Source Detail
Marketo tells you to block these fields once collected. So you will have Smart Campaigns running to stamp leads when they are created in Marketo (or SFDC) with a Lead Source and Lead Source Detail. This is First Touch and should never be overwritten. Great, now you can run reports leads by lead source and then drill down to the source detail.
Now, you ask yourself; what’s the latest touch? How do I find multi-touch?
Idea is to create a few more custom fields to capture that latest touch’
Lead Source Latest
Lead Source Detail Latest
Maybe add a date field to capture when that multi touch happened.
These new fields will not get blocked but continue to be overwritten as your leads continue to interact with your marketing activities. Now you can run reports to see leads and contacts latest touch and history by date when that happened.
This principle can be repurposed for your use case.
When a lead becomes a member of a program, you can stamp the lead with the name of the program into a custom field and date stamp into the date field. Continue to stamp leads as they enter programs and allow the data to be overwritten.
You will be able to view the history of that lead and see what programs they are members of, pass this to SFDC and run reports against it.
As you build your program and you update their progressions, you add another flow step, Chnage data value, your new custom field for Program name and add the name. drop another change data value flow step and repeat with the date field.
Hope this helps.