We run regular 'Brown Bag' sessions where the company provides lunch (usually Pizza, nom nom) and people from teams can come and present cool new stuff they are working on. Topics have included MVC, Facebook API, Deming's red bead experiment, dependency injection and so on, as well as more specific session on particular projects people are working on.
These help share new engineering practices and ideas across the teams and the free lunch usually guarantees a good attendance. It's a reasonable balance between push and pull - people aren't forced to attend but it provides a structured way for people to find out more about what their colleagues are working on.
We also run communities of practice amongst the different disciplines (Dev, QA, BA, ScrumMaster). These tend to be more focused on detail than the brown bags, e.g. informing devs of major changes that have been made to systems that everyone needs to be aware of. More info on Mike Cohn's blog on that, in the article http://blog.mountaingoatsoftware.com/cultivate-communities-of-practicecultivate communities of practice.
Another point of knowledge transfer is 'Scrum of Scrums' which a member of each team attends once a week. The intent is to keep other teams appraised of who is working on what to avoid conflicts/dependencies. It's not as effective as it perhaps should be, something we need to look at.
An initiative we've started recently is a fortnightly award called 'Achievements in Agile' where teams can win a prize (usually a night out or toys like Nerf guns) for stuff like trying innovative process improvements. This is peer nominated which means teams need to actively promote what they are doing.
Teams also invite members of other teams to showcases etc.
Finally, we're a pretty social bunch so there is usually a decent amount of discussion in the pub about what is great (or not) about what we're working on at the moment!