I have a method for getting about 1600 xp per minute at a cost of 10 gold per xp. I'm 30 and it only took about 5 minutes to get 31. Quite simply Zynga has a lot of server-side checks, but there are a few things they leave to the client for performance: plant time, harvest time, plow time and time-to-harvest to name a few. So if you can trick your client into using a 0 plant time, plow time, and time-to-harvest you can effectively plant and plow as fast as your comp and autoit can keep up. Its like the soybean bot except planting is instantaneous and there's no delay to delete.
To do this, you only need to get your client to use a different gameSettings.xml that defines these settings and more. There may be a way to save and modify the HTML that is loading the Farmville game, but I trouble with that. Instead:
1. Download Fiddler (a transparent proxy by Microsoft that allows you to inspect and modify web requests): www.fiddler2.com
2. Download the most recent gameSettings.xml document (you can find the version in the HTML source or with something like Firebug): http://facebook2.farmville.static.zynga.com/current/v5608/gameSettings.xml
3. Add a AutoResponder rule to match: "regex:(?insx)^http://.*gameSettings\.xml$" and respond with "C:\gameSettings.xml" (or wherever you saved the xml document.)
4. Now to prove that Fiddler is serving your own document, edit C:\gameSettings.xml and change a comment or something obvious. Now hit this URL again (hit shift-refresh to force your browser to override its cached copy): http://facebook2.farmville.static.zynga.com/current/v5608/gameSettings.xml
If you get your modified version, then you're good to go. When you refresh Farmville, it will use your gameSettings.xml instead of the one on the server.
You can play with the different settings, but most of them are protected server-side. That means you can make something cost 0 gold, but the server will just barf when you buy it. You can enable some of the unreleased items for purchase like "Oil Derrick" and you can place it but the server will send back an error and force a refresh. There's still lots of fun to be had though!
However, like I said before, some of the timer options are left to the client. So go ahead and change your plowTime, harvestTime and plantTime to 0. This gives you insta-farm if you have trapped your guy. Or if you don't want to trap you guy, change walkSpeed to something like 1 and you'll fly! Whenever you change your gameSettings.xml you need to force a refresh so your client reads the new settings. Shift-refresh like you did before.
Now its time to modify the crops. Search for "soybeans" and change the growTime to 0.00001. Now when you plant soybeans they will ripen and wither away in literally seconds. Don't be tempted to harvest them because the server checks the harvest time and will barf. The server does not, however, check plow time. You can plow anything you want and the server doesn't care.
So to get mad XP all you need to do is run a basic autoit script that plants these uber-soybeans, then wait a second and run it again with plow, rinse and repeat. All in all I can do my whole farm in 30 seconds, so depending on your farm size this should come out to 1000-2000xp per minute at a cost of 10 gold per xp. If you play with the coinFountainProbability you can get the free money for plowing more often, but from experience this is somehow protected by server which I don't understand...if the client is flipping the coin then why would the server reject it. Oh well, if anyone figures that out then you might be able to net gold at the same time you are XPing.
Proceed with caution, Zynga will figure it out eventually.