The endcaps of that fan motor have a crimped-in-place aluminum disk capturing a felt washer that held oil and a circular spring that presses the spherical bronze bearing in place:

Pulling all that out reveals the bearing (tilted on its side to show the spherical outer shape):

The shaft is a scant 3/16 inch in diameter, about 0.181 instead of 0.1875 inch. I have some 3/16 inch ID cartridge bearings in the heap that are a sloppy fit on the shaft, but nothing that a wrap of 2 or 3 mil shimstock and a dab of green Loctite wouldn’t cure.
A bit of doodling suggests two of these bearing holders should fit in the endcaps, stand over the spherical bearing mounts, capture the ball bearing OD, keep dust out of the balls, and perhaps have enough compliance to let the bearings self-adjust to the right fit:

The fan tries to pull the rotor out of the frame, although I think the bearings & Loctite can handle that much axial load. I must try this out on the bench and see how long it takes for the Freezer Dog to return…
It needs a trial print and some sizing adjustment, plus maybe an allowance for end play, but it’s close.
The OpenSCAD source code:
// Refrigerator Fan Bearing Support
// Ed Nisley KE4ZNU - May 2012
// Layouts
Layout = "Show"; // Show Fit Build
Gap = 5.0; // between parts in Show mode
BuildOffset = 5.0; // offset between parts on build plate
//- Extrusion parameters must match reality!
// Print with +1 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;
HoleWindage = 0.2;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1; // make holes end cleanly
//----------------------
// Dimensions
CapID = 32.0; // bearing endcap
CapHeight = 7.0; // ... below aluminum cap recess
SupportOD = 10.3; // spherical bearing support
SupportHeight = 3.0;
BearingOD = 12.7; // ball bearing race
BearingID = 4.68; // ... shaft dia
BearingThick = 4.0;
Ribs = 8; // number of support ribs
RibLength = 2.0; // length beyond cylinder
RibWidth = 4*ThreadWidth;
LidOD = CapID/2; // bearing retainer lid
LidThick = 2*ThreadThick;
//----------------------
// Useful routines
module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
FixDia = Dia / cos(180/Sides);
cylinder(r=(FixDia + HoleWindage)/2,
h=Height,
$fn=Sides);
}
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
//-------------------
// Objects
module Retainer() {
color("Green")
difference() {
PolyCyl(LidOD,LidThick);
translate([0,0,-Protrusion])
PolyCyl(BearingID,(LidThick + 2*Protrusion),8);
}
}
module Holder() {
color("Chocolate")
difference() {
union() {
cylinder(r=(CapID - 2*RibLength)/2,h=(CapHeight + LidThick));
for (Index = [0:Ribs-1]) {
rotate(Index*360/Ribs)
translate([0,-RibWidth/2,0])
cube([CapID/2,RibWidth,CapHeight],center=false);
}
}
translate([0,0,-Protrusion])
PolyCyl(SupportOD,(CapHeight + 2*Protrusion)); // clear old support
translate([0,0,SupportHeight])
PolyCyl(BearingOD,CapHeight); // bearing pocket
translate([0,0,(SupportHeight + BearingThick)])
PolyCyl(LidOD,CapHeight); // bearing retainer
}
}
//-------------------
// Build things...
ShowPegGrid();
if (Layout == "Show") {
Holder();
translate([0,0,(CapHeight + Gap)])
Retainer();
}
if (Layout == "Fit") {
Holder();
translate([0,0,CapHeight])
Retainer();
}
if (Layout == "Build") {
translate([(CapID/2 + BuildOffset),0,0])
Holder();
translate([-(LidOD/2 + BuildOffset),0,0])
Retainer();
}
Well, it’s a thought…