(@Ed: here I go again, now in a different way)
@vedavyas: use google to search this forum (right ed ;-) ) and look in the wiki. Has been discussed before
The userguide talks a lot about dynamic fork/joins. Search for "fork" and you'll see a lot.
The key restriction is that the destination nodes and transitions of the fork must be predefined in the definition. Of course, the content of a node can be so flexible that in practice, this doesn't seem like much of a restriction.
[Ronald, please verify?] Process variables can effectively be scoped to a particular token, so you can push data down each branch of the fork by setting variables that are used as parameters for each branch.
Yes variables can be scoped, but I do not know to what extend and how exactely. I just never used it. Look at the tasknodeimpl to see how it is done there.
Task-scoped variables aren't relevant, because when the fork runs the task instances don't exist, so the fork can't push data to them then.
Process-scoped variables aren't relevant, because there may be multiple tokens executing the same transition from the fork with different data assigned to them.
So token scoping is the only thing that makes sense. It looks like it should work - I just haven't done it. From a static perspective, I think token-scoped variables look like they are process-scoped. Since tokens are only created at run-time, this makes sense.
Oh I didn't mean to use task scoped variables, just to have a look at how task scoped variables is implemented to get an idea.