Hi
I have done one. As Joojaa says it is quite complicated to do an mechanically correct suspension - especially the front wheel spindle if you have what is called a "McPherson spring strut". But if you drop that notion and go for something that looks good instead, it can be done without a ton of math and API programming.
Basically you have to create a good hierarchy whom you aim constrain in a good way. For instance one side of the front suspension:
subframe
|-> lower link arm
||->spindle U/D
|||-> spindle L/R
Create a locator at the center of the wheel in x/z direction and at the y-position of the lower control arm. Aim constrain the lower link arm to this one. If you then move the locator up/down you get a good lower link arm movement.
Then create a new locator and position at the top of the spring strut. Aim constrain the spindle U/D to this one and you have a fairly good motion of the spindle for an up/down movement.
However this is the one where all the API and maths come: since usually the "action line" (i.e. the line through the upper spring strut bearing and the lower balljoint) is not parallell with the spring strut itself, the movement of the spring strut in the sideways direction is not good.
If you want, it is quite possible to solve the movement equation and do an new API node - "aimOffsetConstraint" or something. I was thinking along that line when I did my spring strut, but in the end it is far easier to cheat. It always is 
The cheat I made is like this:
I put an SDK on the upper spring strut locator in the sideways direction (x?) and linked it to the up/down position of the control arm locator. Create a new locator and point snap to the upper spring strut locator. Take a few sample points while moving the wheel locator up/down. In each position, you can point snap the spring strut locator to the copy - since that stays in position.
If you made it this far the left / right movement of the spindle is just another locator and an aimConstraint. If you really want there are ways to make the wheels turn accurattly if your car is path animated too with the "pointOnCurveInfo" node and some tinkering with mechanics
That is the difficult part.
Springs are just some utility nodes (multiplyDivide, distance) connected to one axis of the scale attribute of an helix nurbs curve.
scaleX = lenth_current / length_restPosition
Then extrude a circle along this curve.
etc. etc.
Think it over and play around with this and you will see the light.
Good luck
/ Daniel