Most people don't realize it, but you can get reasonably accurate prints with just about any 3D Printer, even with low-end clones. With a little bit of time and measuring, prints can be within .05mm accuracy. Having an uneven X and Y is where a 20mm cube will print 20.5mm on the X-axis and 19.95mm on the Y-Axis and cause circles to be over or under-sized and eleptical.
Most machines will come with preset steps configured, based off of the stepper motor and belt configuration. There is a great article written bt Matterhackers on how this is all configured https://www.matterhackers.com/news/3d-printer-firmware-settings-stepper-motor-configuration
To calibrate your axes, follow these steps:
Print a calibration cube and be sure to orient it to match the proper X and Y axes for your printer. It is important to keep track of which direction X and Y is.
You can get it at http://www.thingiverse.com/thing:214260
Find the step-per-mm values for your printer. In most slicers there will be an area you can type in GCODE commands. Typing M501 will let you read parameters from EEPROM. For marlin and smoothie firmware, this should be the M92 value for each axis.
Measure the printed object with a pair of calipers.
Using the following formula lets calculate the new steps-per-mm value:
(OLD step value * DEFINED object length) / MEASURED object length = NEW steps per mm value.
For example the old step value for X is M92 X114.20 and we measured 19.625mm on the X axis of the printed cube. Using those numbers in the formula
(114.20 * 20) / 19.625 = 116.382 Our new X axis steps is M92 X116.382. Enter that in the GCODE area and save it to the EEPROM by typing M500.
Repeat this calculation for the Y axis and print again. Repeat these steps until you are satisfied it is close enough. In case you were wonder what is close enough, Anything that measure 19.955 on any axis is pretty damn close.
Setting the Z steps requires a different method. Since most printers use a mechanical leadscrew this will be set in stone. Make sure to find out which type of stepper motor and lead screw you have and input that information using Prusa's excellent calculator. http://prusaprinters.org/calculator/#stepspermmlead Once you get that number, input it back via the M92 gcode.
While you are at the Prusa calculator, you will notice the next widget they have, is for optimal printing layer height. Just put in the layer height you want to print at and see if will work with your configuration. I recommend keeping a list of the exact layer heights you can print at. This will dramatically improve your accuracy. If it comes up red, avoid it like the plague.
This leaves the last motor to be calibrated, the extruder. The method is very similar to what's been done previously. So go ahead and follow the steps outlined on how to calibrate your extruder steps. Don't worry, we'll wait for you here.
Last but not least, after all this is done. You should follow up with calibrating extrusion thickness. This last part is on a per filament basis, so It's always going to change and it's a good habit to record and keep track of how each roll prints.
With all this done you should be getting near perfect prints.