Yes, what you want to do can work, and your drawing shows how it works fairly well. The pseudocode would look something like this:
curveLength = <length of entire curve>;
tileLength = <length of 1 tile>;
currentLength = 0;
while (currentLength < curveLength)
{
currentTileLength = 0;
startPt = prevPt = calculateBezierAt(0.0);
for (t = delta; (t < 1) && (currentTileLength < tileLength); t += delta) // delta is up to you. I often use 1/100th
{
nextPt = calculateBezierAt(t);
distance = distanceBetween(prevPt, nextPt);
currentTileLength += distance;
currentLength += distance;
prevPt = nextPt;
}
endPt = prevPt;
// Calculate quad here
}
To calculate each quad, you need to generate perpendiculars at the start and end points. You then have 4 points for your quad.
Note that I've simplified things by assuming there's only a single bezier. Normally, you'll have many of them connected together, so it will be a little trickier to iterate over them than I've said above, but it shouldn't be too hard.
Also note that if you have either very tight corners or if the curve loops back on itself you may get bad-looking results. Presumably you'll avoid that if your generating the curves yourself, though.