I am not sure how useful my answer is, but I hope it will bring some points to be clarified in the question. (Also I spent some time on this so I wanna proclaim some to the results of my efforts...)

Since the data was not provided in the original question I extracted it from the image following the (great) explanations here: [Recovering data points from an image][1].

Here is plot with the extracted points:

[![enter image description here][2]][2]

Next I just used Chebyshev polynomials to find a fit with the following commands:

    fit = Fit[data, ChebyshevT[#, 90. x] & /@ Range[0, 40], x];
    Plot[fit, {x, Min[data[[All, 1]]], Max[data[[All, 1]]]}, PlotRange -> All]

[![enter image description here][3]][3]

Here are the errors:

    opts = {Filling -> Axis, PlotRange -> All, ImageSize -> 600};
    Grid[{{"absolute errors", "relative errors"},
      {ListPlot[Map[(#[[2]] - (fit /. x -> #[[1]])) &, data], opts],
       ListPlot[
        Map[(#[[2]] - (fit /. x -> #[[1]]))/(Abs[#[[2]]] /. {0. -> 1}) &, 
         data], opts]}}]

[![enter image description here][4]][4]


If I understand the question correctly the fitting of a particular type of family of curves is desired. I was not able to work with the functions provided in the question. I used `SkewNormalDistribution` PDF that seems to have similar properties as the data. So I repeated the above commands using a generated basis of `SkewNormalDistribution` PDF's derived with combinations of different parameters ranges. I assume this approach would work with the functions in the question.

First we generate around 100 functions and plot them:

    funcs = Flatten@
       Table[PDF[SkewNormalDistribution[c, s, \[Alpha]], 
          x] /. {x -> ( x*1000)}, {\[Alpha], {-1, -0.6}}, {c, -0.04, 0.01,0.004}, {s, 0.7, 1, 0.1}];
    Plot[Evaluate@funcs, {x, Min[data[[All, 1]]], Max[data[[All, 1]]]}, 
     PlotRange -> All]
  
[![enter image description here][5]][5]

Next using the generated functions we add to them their antisymmetric versions and {1,x,-x}. The resulted list is given to Fit:

    fn = Fit[data, Join[{1, x, -x}, funcs, -funcs /. {x -> (-x)}], x];

    Plot[fn, {x, Min[data[[All, 1]]], Max[data[[All, 1]]]}, 
     PlotRange -> All]

[![enter image description here][6]][6]

Here are the errors:

    opts = {Filling -> Axis, PlotRange -> All, ImageSize -> 600};
    Grid[{{"absolute errors", "relative errors"},
      {ListPlot[Map[(#[[2]] - (fn /. x -> #[[1]])) &, data], opts],
       ListPlot[
        Map[(#[[2]] - (fn /. x -> #[[1]]))/(Abs[#[[2]]] /. {0. -> 1}) &, 
         data], opts]}}]

[![enter image description here][7]][7]


  [1]: http://mathematica.stackexchange.com/questions/1524/recovering-data-points-from-an-image
  [2]: https://i.sstatic.net/2MJ2a.png
  [3]: https://i.sstatic.net/TefSs.png
  [4]: https://i.sstatic.net/JFtom.png
  [5]: https://i.sstatic.net/PbGag.png
  [6]: https://i.sstatic.net/u4OUb.png
  [7]: https://i.sstatic.net/l18CQ.png