I'll share with everyone - it could be useful.
For me, "implemented" in the case of collective code ownership means "anyone can confidently take up work in any aspect of the system". Not only do they not need permission from someone to do the work or make the change, but they also have confidence in understanding how different pieces of the code affect the overall system and can confidently make change without worry about introducing new defects. Just because someone feels safe making a change, if they feel the need to go to a specific teammate to make sure the changes to the implementation, the tests, any documentation, and so on, is correct, I don't think that there's true collective code ownership.
For teams working on a greenfield effort while developing these skills and practices, I don't think it is that difficult, especially if you introduce high-quality automated testing very early. I think it's far more difficult for teams working in a legacy system. I don't think the timelines for learning and performing the practices changes, but I think it would take longer to "fully implement" some of them, including those that are required for collective code ownership. For example, it's one thing to stand up a CI server and start writing tests, but it's another to have enough high-quality tests to confidently make changes. TDD can help introduce new tests for new development while characterization tests can reduce the risk of refactoring, but it could take a while to have enough tests built up. In my experience, "characterization tests" cover the "big things", but not some edge cases, and those edge cases can turn into production fires pretty fast. Pairing and mobbing can share knowledge, but it could take time to get to the whole breadth of the system. Backfilling system documentation is an option, but that also takes away from other work.
On a brownfield application, it could take a lot of effort to discover and share the knowledge across the team. The extreme of stopping development to backfill high-quality tests, documentation, and do the necessary refactoring is something that probably won't happen. The other extreme of neglecting these is far more likely. The right answer is somewhere in the middle, balancing the technical work needed to adapt the system to support agility with ongoing new development. Unfortunately, I've seen it tend to tip more in favor of new development than it should. So even if the new development is good, there are regressions in the older parts of the system caused by missing or low-quality automated test coverage, high coupling, or even exposing new ways to trigger old defects.
I see the two biggest barriers to collective code ownership as high-quality automated test coverage and knowledge across the breadth of the system. It's (relatively) easy to start those practices. It's much more difficult to get them to where they are needed on some legacy systems. I wouldn't be surprised if you talk about this in Continuous Integration, Refactoring, some of the design practices, and maybe Ubiquitous Language and No Bugs. Collective code ownership is something that you want to think about and work toward early, but will likely be something that you achieve later, especially when working with legacy systems.