I think the best solution would depend on what is static/known and what
needs to be changed based on the information you get back from services.
Do you know ahead of time what the possible fields are? If you do, then
defining the fields and activating/inactivating them make sense. You can
also set the options by updating the fields at process time.
I would probably start by creating the form, kick off the async jobs,
setting the options/active fields as the information comes in, then when
all jobs are completed, run process and display the form. Or you could
just collect the information needed to construct a 'correct' form and
create it when all information is in.
Gerda