Chris,
Are you trying to do something which requires continuous motion (as in a constant rotation servo), or just looking to do the amplitude part of the curve with the servo? If you are just trying to do the amplitude, I think you could handle this mechanically as well as in programming, and it might be simpler.
Doing it all mechanically is pretty much a question of where you take your lever out of the servo's arc of motion. To illustrate - in R/C model warship combat, many captains mount their servos offset from the axis of the ship a bit or a lot. They then set the servo to centered, line up the servo arm perpendicular to the centerline, do the same with the rudder, and put in the appropriate length connect them. Everything is perfectly square, so the rudder should work just right. Nope, it has much more throw in one direction than the other. ???????? The trick is to line the servo and rudder arms up perpendicular to the line drawn between the servo spline and the rudder post.
Another example - Knowing about this, and a little noodling, and you can use this bug as your feature. One of our guys had an Italian ship with 3 rudders. The two forwardmost rudders could not turn very far toward the centerline of the ship (inboard) before they hit a propellor shaft, but could turn freely outboard. The solution did not involve separate programmed servos or springs, but just a nice (single) plate, mounted on the servo arm, that used the same effect to change the rate of movement at different points on the different rudders. Works smoothly and seamlessly, too. I understand it took some trial and error to get the angles right.
Cheers,
Wreno