I don't think there should be formal and informal as much as there are different types of time allowed for code reviews. If there is a bug to be fixed ASAP and the code change is just a few lines of code this may still get reviewed but likely not in the same way as if you are putting out a new ERP or CRM system by contrast. Also, in some cases there can be hours set aside to review some code while in others it should take less than 5 minutes.
The documentation can be in a few forms. It may just be an e-mail saying that Joe reviewed Bob's work and that this is approved to go into the next stage for a release. Alternatively, it may be a few pages of notes on what to change before promoting the code so that some design patterns are used and the code is cleaned up from its initial quick and dirty form.
As for the last question, I think the answer is sometimes. If you have some code that you want to get other opinions on how to optimize the code, then not having the author participate may be helpful in getting ideas and then having the author either make the change or justify why the change doesn't improve the code, e.g. if someone wants to put in a bubble sort algorithm this may be rejected because of other more efficient sorting algorithms like quicksort, mergesort and heapsort.
Edited to added a couple of patterns that I found useful:
For bug fix code reviews, the pattern I like best is the following:
1) Show the bug in a testing/staging environment so that I can see what went wrong.
2) Show me where the code was changed and a brief explanation of why it was changed this way.
3) Show me that the code is fixed on your local machine.
In contrast, if one implements an API with a dozen methods then it may be better to have some documentation that summarizes what was used in the implementation and why some choices were made, e.g. what kind of list implementation was used like an array, hashtable, linked list, generic list, stack, queue, etc.