To implement the scenario as described using BPEL, let's use a sequential order approval sequence where the order ID is used for correlating the instances of process A, B and C in the sequence. The document schema carrying the approvals for the order is represented as:
XML Schema:
OrderApproval
OrderId (string)
ApprovalA (string)
ApprovalB (string)
ApprovalC (string)
The pseudo BPEL code for processes A, B and C is:
process A:
Begin
Receive input OrderApproval
Assign "Approved by CompanyA" to OrderApproval/ApprovalA
Invoke service (process) B
Wait for callback from C with correlation set to OrderId
Assign OrderApproval to output
Invoke output OrderApproval on client callback
End
process B:
Begin
Receive input OrderApproval
Assign "Approved by CompanyB" to OrderApproval/ApprovalB
Invoke service (process) C
End
process C:
Begin
Receive input OrderApproval
Assign "Approved by CompanyC" to OrderApproval/ApprovalC
Invoke service (process) A
End
The sequence is instrumented by a client enacting process A, resulting in the call sequence A => B => C => A. See the diagrams FlowA, FlowB and FlowC for a visual representation of the executed flow in each of the three BPEL processes.
Flow A
Flow B

Flow C
|