Thanks for the reply. Your solution is very elegant.
I think I understand it but I'll enumerate the steps anyway.
1. Form a 3D curve from a series of control points.
2. At 'n' interval, pick a point on the curve and calculate the tangent to the curve, then the unit normal.
3. Using the unit normal, form a circle around the initial point (of radius 'r') that consists of a fixed number of points.
4. At 'n+1' interval, repeat the process above.
5. Use the points on the two successive circles to form patches of geometry (quads or triangles).
6. Repeat for the entire length of the curve.
I do need code (or pseudocode) for this because the devil is in the detail.