Я попробовал небольшой эксперимент:
<fork name="fork1" >
<transition to="right" />
<transition to="left" />
</fork>
<node name="left">
<event type="node-enter">
<script>
<expression >
left="left";
shared = left;
</expression>
<variable name='left' access='write' />
<variable name='shared' access='write' />
</script>
</event>
<transition to="join" />
</node>
<node name="right">
<event type="node-enter">
<script>
<expression >
right="right";
token.parent.processInstance.contextInstance.setVariable("fromRight", "woot!");
shared = right;
</expression>
<variable name='right' access='write' />
<variable name='shared' access='write' />
</script>
</event>
<transition to="join" />
</node>
<join name="join" >
<transition to="done"></transition>
</join>
<end-state name="done"/>
В конце я получил доступ к трем переменным: shared, right и fromRight, которые были явно установлены сценарием для родительского элемента.
Общая переменная получила свое значение от правой вилки, изменения, сделанные слева, исчезли.
Обратите внимание, что переходы на самом деле не являются асинхронными для меня, и весь эксперимент будет выполняться в одной транзакции, эти факторы могут повлиять на результат