The original document is submitted to me by the requester. I review and if approved, want this to go to one, two or three departments, depending on document content. If not approved or more information needed, returned to requester. If all reviewers approve, then it needs to go to the same department's manager for final approval. All need the ability to reject back to requester.
So there a couple of concepts you requested here:
1) The Approval by multiple parties - this is managed via your flexi-task or approval,. basically by assigning a task to multiple parties and then choosing the option "All must agree" you enforce the approval behavior you want.
2) The allocation to a number of different users. This is a little more tricky and can have multiple solutions depending on the requirement. Essentially what you need is a variable where you can keep all Approvers names and then assign the flexi task or approval task to the variable. However the trick is how you fill in that approver variable with the required names. If its possible to map out the approvers according to rules you can create a matrix from which you build the approvers as a Query List option based on your rules. If you cannot design a matrix and want to select users you can make that part of the review process by creating 3 approval fields and concatenating them after the review to provide the Approver list, i.e. if there is no field for one of them it will be excluded from the approver list.
3) For the managers, these too could live in the matrix, i,e Department, Approver, Manager or if you are using the variable above then you can use the Get User Profile details and get the users manager from their AD properties for each approver, so when you are concatenating the approvers also concatenate the managers.
If you need more help or the above is too vague drop me a line!
Use request data action for review and for approval task use either Request approval or Felxi task and with the help of state machine move the task accordingly as per your requirement. Let me know if you face any difficulties.