Hello! Good questions.
Let's start with the "not discussing implementation issues during code reviews". When I envision a code review, I envision a process where copies of code have been handed out to participants, they each individually review the code and record comments, and then a meeting is held where all of the candidate defects are collected with clarifying comments and given to the author/maintainer. It has been found to be a best practice to avoid discussing solutions to the defects during the meeting. It is the job of the author to understand what the criticism is, and then to decide what to do about it. If the author needs help, he/she can of course engage a peer for that help, but it doesn't happen during the meeting. The reasons have to do with efficiency and psychology. The meetings can drag on forever with a couple of people dominating the discussion, and the author can begin to feel personally attacked.
Now, it sounds like that isn't what you're talking about. It sounds like you are simply asking for a peer to informally review your work before it gets delivered to test. So, the code review "rules" don't really apply. It all depends on what your process is, what the intent of these peer desk checks are, and what kinds of pressures your project is experiencing. If you think you're "done" with the code, and the peer desk check is a process gate to ensure no "obvious" defects sneak through that will frustrate the testing, then I'd frown on any implementation suggestions. If the code "works", then what would be the justification for re-implementing it a different way? If it's broken, then your peer ought to be able to explain what's broken, and you ought to be able to figure out how to fix it.
Now, I'm not saying that people shouldn't work collectively and discuss implementation options. It's just that I feel this is better done BEFORE or at least WHILE the code is written. If you're doing it after the code is written, then you're wasting a lot of time re-implementing stuff (or arguing about re-implementing stuff). So, by all means, try pair programming. Try pre-implementation engineering discussions. Try design discusssions and design reviews.
Now let's discuss team ownership of code. I can understand your reticence to changing other people's code, because you're working in an environment of individual code ownership. In that environment, I wouldn't suggest that you go changing other people's code. But, I'll share my experience with you. First, there should be an environment of mutual respect. We all understand that we're working as a team, we're not competing to be the "best programmer". If you change code that I originally wrote, I understand that either requirements have changed or that I simply made some sort of error. I appreciate you "having my back", so to speak. We all make mistakes, and the sooner we gain the humility to accept that, the sooner we can move on to being a productive team. I should see this as an opportunity to learn, rather than a personal attack on my abilities.
But what is more difficult to explain, is that so much collaboration is going on that I don't feel like code that I wrote alone was really mine anyway. I've already discussed some design choices with other teammates. I've already immersed myself in existing code, and so I understand the architecture, coding standards, etc. And if this code is in a completely new module or seems particularly risky, I'll ask a teammate to pair program with me for awhile.
For a junior engineer, probably all of his programming should be done in a pair programming format for awhile. And his first "solo" assignments should actually be refactorings or enhancements of existing code. Not only is this good education, but it will make him feel less of a "target" for code changes.
My experience was that people didn't take offence. For one thing, I wouldn't rush to change code that I wasn't comfortable with. As projects develop, individuals tend to specialize as experts in certain areas of the code base. I wouldn't go changing web service code willy nilly if my baliwick was javascript. But, there will be times when I do need to change web service code. The web service "expert" is on vacation when we discover a defect. Or just simple load balancing--I'm the only one with any spare cycles at the moment. At those times, I just proceed with caution and try to get input from my teammates. I'll also take extra care to test the code. And I'll have it reviewed.
All of which highlights some benefits of collective code ownership. Each person tends to develop familiarity (not always expertise) in a large portion of the code base. This means that the team won't by stymied when one person leaves the company, or goes on vacation, or catches the flu. It means that tasks can be allocated effectively--one person doesn't become a bottleneck. It means that errors or oversights are detected quickly rather than festering in the code for months undiscovered. It means that designs improve as more smart people have a chance to work with the code. It means that integration is smoother, because modules don't evolve in isolation.
There is a lot more to say, but I hope this helps for now