1) Spacing between memories:
It depends on project and number of layers which you can use. If memories are using T-Branch topology, then the simple way to calculate approximate space between memories is (number of tracks in CMD+CTRL+ADDR+RESET + 1) * track width / gap * 2 + some space for decoupling capacitor VIAs. However, memories can be also placed closer, but it is more difficult to route and more layers may need to be used.
If they are using Fly-By, the chips can be placed almost near to each other (you may need to add some space for decoupling capacitors and some space to cover memory package size difference).
I recommend you to have a look at JEDEC examples (
http://www.fedevel.com/welldoneblog/...yout-examples/) or our open source designs
http://www.imx6rex.com/2) There are couple of online tools, but simple and useful is to install
Saturn PCB Toolkit. It's a free software and has a lot of useful calculators.
3) For high speed signals you would like to minimize number of VIAs in the tracks and also you may need to consider influence of stubs in the VIAs. I do not really work with "size" of VIA - for signals we always use the smallest easy to manufacture VIAs (e.g. 0.45mm pad / 0.2mm drill for through hole or 0.27mm / 0.1mm for uVIA ). I do consider using uVIAs / buried VIAs if it is possible to eliminate VIA stub when routing between particular layers.
4) You can do tainted VIAs, the result is same as changing Solder Mask Expansion value.
5) I am not sure what do you mean by design rules for uVIAs.
6) I never use uVIAs for power tracks
7) We have this:
i.MX6 Module Layout – Complete PCB Routing [Video]