Very interesting, really!
Initially, I was confused by the naming (TFixedIntervalChartSource), and by your description of a constant count of labels, because after zooming the count of labels changes. But after some playing I was beginning to see the point: If you zoom around a labeled point, then the label is still existing afterwards. In the builtin algorithm, however, this label usually disappears after zooming. This is a very interesting feature. To avoid the confusion with the name I'd propose a more general name, such as TAxisChartSource.
Of course, it would be great if your algorithm would work also with nonlinear transformations as well. An interesting case would be a log scale. Suppose an axis between 1 and 1000; on log scale the axis limits are 0 and 3. I'd expect to see primarily labels at the integer parts of the graph units (0, 1, 2, 3), i.e. powers of 10 of the axis units (1, 10, 100, 1000). Now, if zooming happens, additional values may be inserted in between, but in order to get "nice" labels these additional labels will be at nonequidistant points (e.g: 1, 3, 10, 30 which in graph units corresponds to 0, 0.477, 1, 1.477)
For working with transformations, the TValueInRangeParams passed to the ValuesInRange method contains fields with function pointers for the current transformations and their inverse: FAxisToGraph converts from axis to graph units, and conversely FGraphToAxis converts from graph to axis units. And there is also a FGraphToImage function pointer which converts the graph units to drawing units (usually pixels) (and a final conversion FScale from these units to final device units, as needed e.g. for printer output with a much higher pixel density).
The ValuesInRangeParams contain also a field FFormat, you should use this to calculate the label (instead of FloatToStr).
Using dedicated DefaultExtentMin/Max values for the ChartSource seem to pose some limitation to me because it does not take care of the automatic axis range determination. I see that there is not direct way for the ChartSource to get the unzoomed axis limits. Therefore I modified TAChart such that two more fields (e.g., FFullExtentMin and FFullExtentMax) are available in the ValuesInRangeParams. It is not yet in the official sources because I don't know where this discussion will lead us. Please copy the attached files into your TAChart folder (make a backup copy first). Note that the modified files are from the trunk version of Lazarus, I don't know if 1.6 will compile with this modification.
In the second attachment you find a modified version of your demo where the DefaultExtentMin/Max properties are removed.