diff --git a/docs/README.md b/docs/README.md
index 903ae34d5f0e9127ebad30af2a6425eb9abd8b5b..65fbb49afb9c4a8d94a947dc3194f8a0e95f55e2 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -123,6 +123,7 @@ jsf.locate('faker');
 - `reuseProperties` — If enabled, it will try to generate missing properties from existing ones. Only when `fillProperties` is enabled too  (default: `false`)
 - `fillProperties` — If enabled, it will try to generate missing properties to fulfill the schema definition (default: `true`)
 - `random` — Setup a custom _randonmess_ generator, useful for getting deterministic results (default: `Math.random`)
+- `replaceEmptyByRandomValue` — Remplace default empty value by a random value (default: `false`)
 
 ## Building
 
diff --git a/src/class/OptionRegistry.js b/src/class/OptionRegistry.js
index 7ed7c203a8e232be28f087b4dc7e58c7d2746714..09595cd0bb930a48a80ec60fc37b0b9fb66c3c57 100644
--- a/src/class/OptionRegistry.js
+++ b/src/class/OptionRegistry.js
@@ -25,6 +25,7 @@ defaults.maxLength = null;
 defaults.resolveJsonPath = false;
 defaults.reuseProperties = false;
 defaults.fillProperties = true;
+defaults.replaceEmptyByRandomValue = false;
 
 defaults.random = Math.random;
 
diff --git a/src/core/traverse.js b/src/core/traverse.js
index f5bc888616543e0f37f03b65ad46f12f2e1a10cf..0f800f061214bb9bc8f38ffe13304524a6261100 100644
--- a/src/core/traverse.js
+++ b/src/core/traverse.js
@@ -25,7 +25,9 @@ function traverse(schema, path, resolve, rootSchema) {
     }
 
     if (optionAPI('useDefaultValue') && 'default' in schema) {
-      return schema.default;
+      if (schema.default !== '' || !optionAPI('replaceEmptyByRandomValue')) {
+        return schema.default;
+      }
     }
 
     if ('template' in schema) {
diff --git a/tests/schema/core/option/replaceEmptyByRandomValue.js b/tests/schema/core/option/replaceEmptyByRandomValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..753d7db988e211ca3c63d06ae575d0f117c29849
--- /dev/null
+++ b/tests/schema/core/option/replaceEmptyByRandomValue.js
@@ -0,0 +1,7 @@
+module.exports = {
+  register(jsf) {
+    return jsf.option({
+      replaceEmptyByRandomValue: true,
+    });
+  },
+};
diff --git a/tests/schema/core/option/useDefaultValue.json b/tests/schema/core/option/useDefaultValue.json
index 6973c7e3092fc4d56f9e4ca20664798b3798145b..6f6d5895f4b02bd39fc72ac683d5f8c957a5d64c 100644
--- a/tests/schema/core/option/useDefaultValue.json
+++ b/tests/schema/core/option/useDefaultValue.json
@@ -10,6 +10,30 @@
         },
         "equal": "Hello",
         "require": "core/option/useDefaultValue"
+      },
+      {
+        "description": "should handle useDefaultValue option with an empty default value",
+        "schema": {
+          "type": "string",
+          "default": ""
+        },
+        "equal": "",
+        "require": "core/option/useDefaultValue"
+      },
+      {
+        "description": "should handle useDefaultValue & replaceEmptyByRandomValue option",
+        "schema": {
+          "test-response": {
+            "type": "string",
+            "default": ""
+          }
+        },
+        "valid": true,
+        "notEmpty": ["test-response"],
+        "require": [
+          "core/option/useDefaultValue",
+          "core/option/replaceEmptyByRandomValue"
+        ]
       }
     ]
   }
diff --git a/tests/schema/main.spec.js b/tests/schema/main.spec.js
index 0dba88bcbdd09cdc319ba4075f4ded1a3dcec854..88840a368334222a0177e00b10ee36900866c96b 100644
--- a/tests/schema/main.spec.js
+++ b/tests/schema/main.spec.js
@@ -29,7 +29,11 @@ function seed() {
         });
 
         if (test.require) {
-          require(`./${test.require}`).register(jsf);
+          test.require = Array.isArray(test.require) ? test.require : [test.require];
+
+          test.require.map(toRequire => {
+            return require(`./${toRequire}`).register(jsf);
+          });
         }
 
         const schema = typeof test.schema === 'string'