Zamykam pytanie, bo znalazłem odpowiedź. Niestety jest "nieelegancka" - narysować kilka cienkich krzywych w rożnej skali okna (taki ala offset), i chyba mija się z celem.
edit: kawałek bardzo niedoskonałego kodu
if (canvas.getContext) {
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.scale(chartwidth/moveqfval.right.x, chartheight/moveqfval.center.y);
ctx.translate(0,moveqfval.center.y);
ctx.moveTo(moveqfval.left.x, moveqfval.left.y) ;
ctx.fillStyle = "blue";
ctx.transform(1,0,0,-1,0,0);
ctx.quadraticCurveTo(moveqfval.dxdy.x, moveqfval.dxdy.y, moveqfval.right.x, moveqfval.right.y);
ctx.lineWidth = 0.1;
ctx.scale(0.9,0.9);
ctx.lineTo(moveqfval.right.x, moveqfval.right.y);
ctx.quadraticCurveTo(moveqfval.dxdy.x+moveqfval.right.x*(1-0.9)/2.0, moveqfval.dxdy.y+moveqfval.dxdy.y*(1-0.9)/8, moveqfval.left.x+moveqfval.right.x*(1-0.9), moveqfval.left.y);
ctx.closePath();
ctx.fill();
}